package com.suntianci.stock.service;

import com.suntianci.stock.pojo.domain.*;
import com.suntianci.stock.vo.resp.PageResult;
import com.suntianci.stock.vo.resp.R;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @ClassName StockService
 * @Author 孙天赐
 * @Date 2024/12/26 14:36
 * @Description TODO: 股票相关服务层实现类
 */
public interface StockService {
    /**
     * 获取国内大盘最新的数据
     * @return
     */
    R<List<InnerMarketDomain>> getInnerMarketInfo();

    /**
     * 获取国内板块最新的数据
     * @return
     */
    R<List<StockBlockDomain>> getStockBlockInfo();

    /**
     * 分页查询最新股票数据
     * @param page
     * @param pageSize
     * @return
     */
    R<PageResult<StockUpDownDomain>> getStockInfoByPage(Integer page, Integer pageSize);

    /**
     * 查询涨幅最高前4条股票数据
     * @return
     */
    R<List<StockUpDownDomain>> getBestStockInfo();

    /**
     * 查询最新交易日内的涨跌停数量
     * @return
     */
    R<Map<String, List<Map<String, Object>>>> getStockUpDownCount();

    /**
     * 导出当前页股票数据
     * @param page
     * @param pageSize
     * @return
     */
    void exportStockInfoByPage(Integer page, Integer pageSize, HttpServletResponse httpServletResponse);

    /**
     * 统计A股大盘T日和T-1日成交量
     * @return
     */
    R<Map<String, List>> stockTradeAmoComparsion();

    /**
     * 统计个股（A股）分时涨跌幅度（根据涨跌幅划分区间）
     * @return
     */
    R<Map> stockTimeSharingUpDown();

    /**
     * 查询个股的分时行情数据，也就是统计指定股票T日每分钟的交易数据
     * @param stockCode
     * @return
     */
    R<List<Stock4MinuteDomain>> stockDetailDataEveryMinute(String stockCode);

    /**
     * 获取个股日K线数据
     * @param stockCode
     * @return
     */
    R<List<Stock4EveryDayDomain>> stockDayKLine(String stockCode);

    /**
     *  获取外盘指数行情数据
     * @return
     */
    R<List<OuterMarketDomain>> getOuterMarketInfo();

    /**
     * 据输入的个股代码，进行模糊查询
     * @param searchStr
     * @return
     */
    R<List<Map<String, String>>> searchStockByCode(String searchStr);

    /**
     * 查询个股主营业务
     * @param stockCode
     * @return
     */
    R<StockDescribeDataDomain> getStockMainBusiness(String stockCode);

    /**
     * 获取股票周k线数据
     * @param stockCode
     * @return
     */
    R<List<Stock4EveryWeekDomain>> getStockEveryWeekInfo(String stockCode);

    /**
     * 获取个股最新分时行情数据
     * @param stockCode
     * @return
     */
    R<StockRtDomain> getStockRtInfo(String stockCode);

    /**
     * 获取个股最新交易流水行情数据
     * @param stockCode
     * @return
     */
    R<List<SrockRtTransactionFlowDomain>> getSrockRtTransactionFlowInfo(String stockCode);
}
